package com.lee.dhsg.controller;

import com.lee.dhsg.domain.Catalog;
import com.lee.dhsg.domain.Category;
import com.lee.dhsg.domain.Course;
import com.lee.dhsg.domain.Teacher;
import com.lee.dhsg.service.CatalogService;
import com.lee.dhsg.service.CategoryService;
import com.lee.dhsg.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;




/**
 * 该控制器为课程服务
 * 1、courseofT 教师主页，查看所有发布过的课程
 * 2、courseofCategoryDetailofS 查询某一类别的所有课程
 * 3、courseofSearchofS 通过课程名搜索所有课程
 * 4、courseDetailofS 点击课程进入课程详情页
 * 5、courseComment 通过 Ajax 异步刷新，返回评论数据
 *
 * @author Lee
 */

@Controller
public class CourseController {

    @Autowired
    private CourseService courseService;

    @Autowired
    private CategoryService categoryService;

    @Autowired
    private CatalogService catalogService;

    /**
     * 1、courseofT 教师主页，查看所有发布过的课程
     *
     * @param session
     * @param model
     * @return
     */
    @RequestMapping("/courseofT")
    public String courseofT(HttpSession session, Model model) {

        // 通过 session 读取教师对象
        Teacher teacher = (Teacher) session.getAttribute("TeacherSession");

        // 查找该教师所拥有的所有课程
        List<Course> courseList = courseService.selectByT(teacher);

        // 将查到的教师的所有课程放入 model
        model.addAttribute("courseofTList", courseList);

        return "teacherIndex";
    }

    /**
     * 2、courseofCategoryDetailofS 查询某一类别的所有课程
     *
     * @param categoryId
     * @param model
     * @return
     */
    @RequestMapping("/courseofCategoryDetailofS")
    public String courseofCategoryDetailofS(Integer categoryId, Model model) {

        /**
         * 1、当通过父级类别搜索课程时，通过 categoryId 作为类别表的父级类别id 查询类别id
         * 2、将查询到的类别id 和 categoryId 一并放入一个列表中
         * 3、通过该存着类别id 的列表到课程表中查询课程
         * 4、将查到的课程返回
         */

        // 通过 categoryId 作为父级类别id 在类别表中查询子类别id
        List<Integer> categoryList = categoryService.selectCategoryidByFcategoryid(categoryId);

        // 当 categoryId 本身是子级类别id 时，将自己放入 categoryList 中
        categoryList.add(categoryId);

        // 通过 categoryid 到课程表中查询该类别的所有课程
        List<Course> courseList = new ArrayList<Course>();
        for (Integer categoryid : categoryList) {
            courseList.addAll(courseService.selectByCategoryid(categoryid));
        }

        // 将查到的教师的所有课程放入 model
        model.addAttribute("courseList", courseList);

        return "courseListofS";
    }

    /**
     * 3、courseofSearchofS 通过课程名搜索所有课程
     *
     * @param courseName
     * @param model
     * @return
     */
    @RequestMapping("/courseofSearchofS")
    public String courseofSearchofS(String courseName, Model model) {

        List<Course> courseList = courseService.selectByName(courseName);

        model.addAttribute("courseList", courseList);

        return "courseListofS";
    }

    /**
     * 4、courseDetailofS 点击课程进入课程详情页
     */
    @RequestMapping("courseDetailofS")
    public String courseDetailofS(Integer courseid, Model model) {

        /**
         * 1、通过课程id 查询课程
         * 2、将课程返回 courseDetailofS 页面，以便调用
         * 3、通过课程id 查询课程章节和评论
         * 4、将查到的章节和评论返回
         */

        // 通过课程id 查课程
        Course course = courseService.selectByCourseid(courseid);
        model.addAttribute("course", course);

        /**
         * 通过课程id 查章节
         * 由于章节分级，所以不能用简单的方法
         * 首先，通过课程id 和 fcatalogid 为空两个条件查到该课程的所有一级目录
         * 然后，通过一级目录的 catalogid 作为 fcatalogid 去查询所有二级目录
         * 最终将将结果保存到 Map<Catalog,List<Catalog>> 中，并返回
         */
        Map<Catalog, List<Catalog>> catalogListMap = catalogService.selectAllCatalogByCourseid(courseid);
        model.addAttribute("catalogListMap", catalogListMap);

        return "courseDetailofS";
    }


    /**
     * 5、courseComment 通过 Ajax 异步刷新，返回评论数据
     */
    @RequestMapping("courseComment")
    @ResponseBody
    public String courseComment(){

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "Tom");
        map.put("age", 33);
//        JSONObject jsonObject = JSONObject.fromObject(map);
//        System.out.println(jsonObject);

        return null;
    }


}
